package __数组

/*
https://leetcode.cn/problems/squares-of-a-sorted-array/

977. 平方升序数组
给你一个按 非递减顺序 排序的整数数组 nums，返回 每个数字的平方 组成的新数组，要求也按 非递减顺序 排序。

示例 1：
输入：nums = [-4,-1,0,3,10]
输出：[0,1,9,16,100]
解释：平方后，数组变为 [16,1,0,9,100]
排序后，数组变为 [0,1,9,16,100]

示例 2：
输入：nums = [-7,-3,2,3,11]
输出：[4,9,9,49,121]

思路:
由于可能有负数, 所有元素平方之后, 大小的趋势就是两边大,中间小, 可以使用双指针进行比较

	--> 		 <--
	-7	-5	1	2	3

1.首先定义一个长度为原数组长度新的结果数组,
从大到小来填充结果数组

for left=0,right=nums.size-1; left<=right; {

}
*/
func sortedSquares(nums []int) []int {

	n := len(nums)                //获取数组长度
	left, right, k := 0, n-1, n-1 //声明左右指针位置, k更新结果数组的下标
	ans := make([]int, n)

	for left <= right { //只要left <= right, 执行循环
		lVal, rVal := nums[left]*nums[left], nums[right]*nums[right] //计算左元素平方, 右元素平方

		if lVal > rVal { //ans[k]赋值为左,右元素平方的较大值, 并且移动对应的指针位置
			ans[k] = lVal
			left++
		} else {
			ans[k] = rVal
			right--
		}
		k-- //k同时需要进行移动指针位置
	}

	return ans //返回结果数组
}
